package com.je.app.view.popUp;

import javax.swing.JDialog;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.SpinnerNumberModel;
import javax.swing.UIManager;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.Color;
import java.awt.SystemColor;
import java.util.Date;

import javax.swing.SwingConstants;
import javax.swing.JSpinner;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import com.je.app.control.ControlHabitacion;
import com.je.app.view.MainFrame;
import com.je.app.view.MainFrame.MessageType;
import javax.swing.JSeparator;
import java.awt.Font;
import java.awt.Insets;

public class IniciarTurno extends JDialog{
	private JTextField fieldHoraInicio;
	private JTextField txtUsuario;
	private JTextField txtContrasea;
	private JTextField txtHabitacin;
	private JTextField textField_1;
	private JTextField fieldHoraFin;
	private JTextField txtHoraFin;
	private JSpinner spinnerDuracion;
	private Date dateInicio;
	private String horaInicio;
	private JTextField textField;
	private JSeparator separator;
	private JSeparator separator_1;
	private JSeparator separator_2;
	private JSeparator separator_3;


	public IniciarTurno(final String nombreHab, Date dateInicioPar, int minutosInicial){
		setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

		getContentPane().setLayout(null);
		
		this.dateInicio = dateInicioPar;
		horaInicio = this.dateInicio.toLocaleString().split(" ")[1]; 
		setSize(341,347);
		setResizable(false);
		setLocationRelativeTo(null);
		
		fieldHoraInicio = new JTextField(horaInicio);
		fieldHoraInicio.setHorizontalAlignment(SwingConstants.CENTER);
		fieldHoraInicio.setBounds(191, 104, 86, 21);
		getContentPane().add(fieldHoraInicio);
		fieldHoraInicio.setColumns(10);
		fieldHoraInicio.addKeyListener(new KeyListener(){

			public void keyPressed(KeyEvent arg0) {}
			public void keyReleased(KeyEvent arg0) {
				String [] tiemposInicio = fieldHoraInicio.getText().split(":");				
				try{
					int horasInicio = new Integer(tiemposInicio[0]);
					int minutosInicio = new Integer(tiemposInicio[1]);
					int segundosInicio = new Integer(tiemposInicio[2]);
					if(horasInicio>23 || horasInicio < 0) throw new Exception();
					if(minutosInicio>59 || minutosInicio < 0) throw new Exception();
					if(segundosInicio>59 || segundosInicio < 0) throw new Exception();
					dateInicio = new Date();
					dateInicio.setSeconds(segundosInicio);
					dateInicio.setMinutes(minutosInicio);
					dateInicio.setHours(horasInicio);
					
					int duracion = new Integer("" + spinnerDuracion.getValue());
					Date dateFin = new Date(dateInicio.getTime() + duracion*60*1000);
					fieldHoraFin.setText(dateFin.toLocaleString().split(" ")[1]);
					fieldHoraInicio.setForeground(Color.BLUE);
				}catch(Exception e){
					dateInicio = null;
					fieldHoraInicio.setForeground(Color.RED);
					fieldHoraFin.setText("");	
				}
			}
			public void keyTyped(KeyEvent arg0) {}
		});
		
		txtUsuario = new JTextField();
		txtUsuario.setText("Hora inicio:");
		txtUsuario.setBorder(null);
		txtUsuario.setEditable(false);
		txtUsuario.setColumns(10);
		txtUsuario.setBounds(110, 100, 55, 29);
		getContentPane().add(txtUsuario);
		
		txtContrasea = new JTextField();
		txtContrasea.setHorizontalAlignment(SwingConstants.RIGHT);
		txtContrasea.setText("Duraci\u00F3n (min):");
		txtContrasea.setBorder(null);
		txtContrasea.setEditable(false);
		txtContrasea.setColumns(10);
		txtContrasea.setBounds(81, 140, 84, 29);
		getContentPane().add(txtContrasea);
		
		JButton botonCancelar = new JButton("Cancelar");
		botonCancelar.setBackground(SystemColor.activeCaptionBorder);
		botonCancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				dispose();
			}
		});
		botonCancelar.setBounds(182, 244, 95, 26);
		getContentPane().add(botonCancelar);
		
		JButton btnAceptar = new JButton("Aceptar");
		btnAceptar.setBackground(SystemColor.activeCaptionBorder);
		btnAceptar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if(dateInicio==null){
					//La hora de inicio seleccionada no es valida
					MainFrame.getInstance().showMessage(MessageType.ERROR, "La hora de inicio ingresada no es valida");
				}
				else{
					ControlHabitacion.getInstance().iniciarTurno(nombreHab,dateInicio,(Integer)spinnerDuracion.getValue());
				}
				dispose();
			}
		});
		btnAceptar.setBounds(61, 243, 95, 27);
		getContentPane().add(btnAceptar);
		
		txtHabitacin = new JTextField();
		txtHabitacin.setFont(new Font("Tahoma", Font.BOLD, 12));
		txtHabitacin.setText("Habitaci\u00F3n:");
		txtHabitacin.setEditable(false);
		txtHabitacin.setColumns(10);
		txtHabitacin.setBorder(null);
		txtHabitacin.setBounds(95, 64, 70, 29);
		getContentPane().add(txtHabitacin);
		
		textField_1 = new JTextField(nombreHab);
		textField_1.setFont(new Font("Tahoma", Font.BOLD, 12));
		textField_1.setHorizontalAlignment(SwingConstants.CENTER);
		textField_1.setEditable(false);
		textField_1.setColumns(10);
		textField_1.setBounds(191, 68, 86, 21);
		getContentPane().add(textField_1);
		
		Date dateFin = new Date(dateInicio.getTime() + minutosInicial*60*1000);
		fieldHoraFin = new JTextField(dateFin.toLocaleString().split(" ")[1]);
		fieldHoraFin.setHorizontalAlignment(SwingConstants.CENTER);
		fieldHoraFin.setEditable(false);
		fieldHoraFin.setColumns(10);
		fieldHoraFin.setBounds(191, 184, 86, 21);
		getContentPane().add(fieldHoraFin);
		
		txtHoraFin = new JTextField();
		txtHoraFin.setHorizontalAlignment(SwingConstants.RIGHT);
		txtHoraFin.setText("Hora fin:");
		txtHoraFin.setEditable(false);
		txtHoraFin.setColumns(10);
		txtHoraFin.setBorder(null);
		txtHoraFin.setBounds(110, 180, 55, 29);
		getContentPane().add(txtHoraFin);
		
		spinnerDuracion = new JSpinner();
		spinnerDuracion.setBounds(232, 144, 45, 20);
		getContentPane().add(spinnerDuracion);
		spinnerDuracion.setModel(new SpinnerNumberModel(minutosInicial, new Integer(0), null, new Integer(5)));
		
		textField = new JTextField();
		textField.setText("Iniciar turno");
		textField.setMargin(new Insets(2, 14, 2, 2));
		textField.setHorizontalAlignment(SwingConstants.CENTER);
		textField.setFont(new Font("Tahoma", Font.PLAIN, 16));
		textField.setEditable(false);
		textField.setColumns(10);
		textField.setBorder(null);
		textField.setBounds(41, 23, 113, 20);
		getContentPane().add(textField);
		
		separator = new JSeparator();
		separator.setBounds(27, 34, 281, 1);
		getContentPane().add(separator);
		
		separator_1 = new JSeparator();
		separator_1.setOrientation(SwingConstants.VERTICAL);
		separator_1.setForeground(Color.LIGHT_GRAY);
		separator_1.setBounds(307, 34, 1, 258);
		getContentPane().add(separator_1);
		
		separator_2 = new JSeparator();
		separator_2.setOrientation(SwingConstants.VERTICAL);
		separator_2.setForeground(Color.LIGHT_GRAY);
		separator_2.setBounds(27, 34, 1, 258);
		getContentPane().add(separator_2);
		
		separator_3 = new JSeparator();
		separator_3.setBounds(27, 291, 281, 1);
		getContentPane().add(separator_3);
		
		spinnerDuracion.addChangeListener(new ChangeListener() {      
			public void stateChanged(ChangeEvent e) {
				try{
					if(dateInicio!=null){
						int duracion = new Integer("" + spinnerDuracion.getValue());
						Date dateFin = new Date(dateInicio.getTime() + duracion*60*1000);
						fieldHoraFin.setText(dateFin.toLocaleString().split(" ")[1]);

					}
				}
				catch(Exception exc){
					
				}		
			}});
		
		setTitle("Iniciar un nuevo turno");
		setVisible(true);
	}
	
}
